Data buffers are often used to temporarily store data as that data is being moved from one location to another. A buffer can also provide a mechanism for handling the speed discrepancy between two different memory locations. For example, when data is transferred from a source device to a receiving device that operates at a lower rate of speed than the source device, the receiving device will be unable to write the data as quickly as it is being received from the faster source device. A buffer can temporarily hold the data from the source device and allow the receiving device the appropriate time to write the received data so that no data is lost during the transfer. Additionally, a buffer may temporarily store data if the component accepting the data is unavailable due to congestion or other reasons.
One type of buffer is a First In First Out (FIFO) buffer. In a FIFO buffer, the data leaves in the same order it arrived, that is the data that first enters the FIFO buffer leaves the buffer before any subsequently entered data. Such a buffer may be implemented as a stream. In a streamed buffer, the data that enters the FIFO buffer moves through the length of the buffer in a sequential manner before emerging at the other end. Thus, the buffer becomes part of the data stream.
Throughout the drawings, identical reference numbers designate similar, but not necessarily identical, elements.